package com.ssy.lingxi.pay.api.dto.request.aliPay;

import lombok.Data;

import javax.validation.constraints.*;
import java.io.Serializable;

/**
 * 支付宝支付-退款申请
 * @author lqa
 * @version 2.0.0
 * @date 2021/11/2
 */
@Data
public class AliPayRefundRequest implements Serializable {
    private static final long serialVersionUID = -8673496273830541860L;
    /**
     * 会员id(收款方)
     */
    @NotNull(message = "会员id要大于0")
    @Positive(message = "会员id要大于0")
    private Long memberId;

    /**
     * 会员角色id(收款方)
     */
    @NotNull(message = "角色id要大于0")
    @Positive(message = "角色id要大于0")
    private Long memberRoleId;

    /**
     * 支付宝订单号(交易号)
     */
    @NotBlank(message = "支付宝订单号不能为空")
    @Size(max = 64, message = "支付宝订单号最长64个字符")
    private String transactionId;

    /**
     * 商户订单号
     */
    @NotBlank(message = "商户订单号不能为空")
    @Size(max = 64, message = "商户订单号最长64个字符")
    private String outTradeNo;
    
/*
    订单金额
    @NotNull(message = "金额要大于等于0")
    @PositiveOrZero(message = "金额要大于等于0")
    private Double payMoney;*/

    /**
     * 商户退款单号(只能是数字、大小写字母_-|*@ ，同一退款单号多次请求只退一笔)
     */
    @NotBlank(message = "商户退款单号不能为空")
    @Size(max = 64, message = "商户退款单号最长64个字符")
    private String outRefundNo;

    /**
     * 退款金额
     */
    @NotNull(message = "退款金额要大于等于0")
    @PositiveOrZero(message = "退款金额要大于等于0")
    private Double refundMoney;

    /**
     * 退款原因
     */
    @Size(max = 256, message = "支付宝订单号最长256个字符")
    private String refundReason;

    /**
     * 支付类型: 1-平台; 2-会员; (非必填，空值会根据资金归集模式)
     */
    private Integer payType;

    /**
     * 支付宝AppId，如四个参数有任意一个为空，则会从会员支付参数配置中查询
     */
    private String appId;

    /**
     * 支付宝公钥，如四个参数有任意一个为空，则会从会员支付参数配置中查询
     */
    private String publicKey;

    /**
     * 支付宝私钥，如四个参数有任意一个为空，则会从会员支付参数配置中查询
     */
    private String privateKey;

    /**
     * 支付宝第三方应用商户授权验证token，当资金归集模式为“会员直接到账”时使用，如四个参数有任意一个为空，则会从会员支付参数配置中查询
     */
    private String appAuthToken;
}
